package sj.keyboard.utils.imageloader;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.widget.ImageView;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ImageLoader implements ImageBase {
protected final Context context;
private volatile static ImageLoader instance;
private volatile static Pattern NUMBER_PATTERN = Pattern.compile("[0-9]*");
public static ImageLoader getInstance(Context context) {
if (instance == null) {
synchronized (ImageLoader.class) {
if (instance == null) {
instance = new ImageLoader(context);
}
}
}
return instance;
}
public ImageLoader(Context context) {
this.context = context.getApplicationContext();
}
/**
* @param uriStr
* @param imageView
* @throws java.io.IOException
*/
@Override
public void displayImage(String uriStr, ImageView imageView) throws IOException {
switch (Scheme.ofUri(uriStr)) {
case FILE:
displayImageFromFile(uriStr, imageView);
return;
case ASSETS:
displayImageFromAssets(uriStr, imageView);
return;
case DRAWABLE:
displayImageFromDrawable(uriStr, imageView);
return;
case HTTP:
case HTTPS:
displayImageFromNetwork(uriStr, imageView);
return;
case CONTENT:
displayImageFromContent(uriStr, imageView);
return;
case UNKNOWN:
default:
Matcher m = NUMBER_PATTERN.matcher(uriStr);
if (m.matches()) {
displayImageFromResource(Integer.parseInt(uriStr), imageView);
return;
}
displayImageFromOtherSource(uriStr, imageView);
return;
}
}
/**
* From File
*
* @param imageUri
* @param imageView
* @throws java.io.IOException
*/
protected void displayImageFromFile(String imageUri, ImageView imageView) throws IOException {
String filePath = Scheme.FILE.crop(imageUri);
File file = new File(filePath);
if (!file.exists()) {
return;
}
Bitmap bitmap;
try {
bitmap = BitmapFactory.decodeFile(filePath);
} catch (Exception e) {
e.printStackTrace();
return;
}
if (imageView != null) {
imageView.setImageBitmap(bitmap);
}
}
/**
* From Assets
*
* @param imageUri
* @param imageView
* @throws java.io.IOException
*/
protected void displayImageFromAssets(String imageUri, ImageView imageView) throws IOException {
String filePath = Scheme.ASSETS.crop(imageUri);
Bitmap bitmap;
try {
bitmap = BitmapFactory.decodeStream(context.getAssets().open(filePath));
} catch (IOException e) {
e.printStackTrace();
return;
}
if (imageView != null) {
imageView.setImageBitmap(bitmap);
}
}
/**
* From Drawable
*
* @param imageUri
* @param imageView
* @throws java.io.IOException
*/
protected void displayImageFromDrawable(String imageUri, ImageView imageView) {
String drawableIdString = Scheme.DRAWABLE.crop(imageUri);
int resID = context.getResources().getIdentifier(drawableIdString, "mipmap", context.getPackageName());
if (resID <= 0) {
resID = context.getResources().getIdentifier(drawableIdString, "drawable", context.getPackageName());
}
if (resID > 0 && imageView != null) {
imageView.setImageResource(resID);
}
}
/**
* From Resource
*
* @param resID
* @param imageView
*/
protected void displayImageFromResource(int resID, ImageView imageView) {
if (resID > 0 && imageView != null) {
imageView.setImageResource(resID);
}
}
/**
* From Net
*
* @param imageUri
* @param extra
* @throws java.io.IOException
*/
protected void displayImageFromNetwork(String imageUri, Object extra) throws IOException {
}
/**
* From Content
*
* @param imageUri
* @param imageView
* @throws java.io.IOException
*/
protected void displayImageFromContent(String imageUri, ImageView imageView) throws FileNotFoundException {
}
/**
* From OtherSource
*
* @param imageUri
* @param imageView
* @throws java.io.IOException
*/
protected void displayImageFromOtherSource(String imageUri, ImageView imageView) throws IOException {
}
}